// stdx/futurex.rs
// CRITICAL: Future 与 async/await 基本示例（不启用 runtime）。
// AUTO_COMMENT: 仅展示 Future 类型与构造，不执行异步运行。

#[allow(dead_code)]
pub fn stdx_examples_futurex() {
    // CRITICAL: async fn 返回 impl Future
    async fn async_add(a: i32, b: i32) -> i32 {
        a + b
    }

    // AUTO_COMMENT: 不在这里 await，因为需要运行时；展示类型信息
    let _fut = async_add(1, 2);

    // CRITICAL: 手动实现 Future
    use std::future::Future;
    use std::pin::Pin;
    use std::task::{Context, Poll};

    struct SimpleFuture {
        count: i32,
    }

    impl Future for SimpleFuture {
        type Output = i32;

        fn poll(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Self::Output> {
            self.count += 1;
            if self.count < 5 {
                Poll::Pending
            } else {
                Poll::Ready(self.count)
            }
        }
    }

    let simple_fut = SimpleFuture { count: 0 };

    // CRITICAL: async block
    let async_block = async {
        let x = async_add(10, 20).await;
        x * 2
    };

    // CRITICAL: join! 和 select!（需要 futures crate，但这里模拟）
    // 注意：实际使用需要外部 crate，这里仅展示概念
    // let joined = futures::join!(fut1, fut2);
    // let selected = futures::select!(fut1, fut2);

    let _ = (simple_fut, async_block);
}
